package fi.uba.algocontrol.observer.avion;

import fi.uba.algocontrol.model.Mapa;
import fi.uba.algocontrol.model.aviones.Avion;
import fi.uba.algocontrol.view.AvionView;
import fi.uba.algocontrol.view.AvionesView;
import fiuba.algo3.titiritero.modelo.GameLoop;
import java.util.Collection;

/**
 * @author Mauro Cendón
 */
public class AvionCollector {

    public static void collect( AvionesView avionesVisibles, GameLoop gameLoop, Mapa mapa )
    {
        Collection<AvionView> avionesVisiblesCp = avionesVisibles.clone();

        for(AvionView avionView : avionesVisiblesCp)
        {
            Avion avion = (Avion)avionView.getPosicionable();

            //si el avion se va del mapa
            if (!(avion.getX() + avion.getRadioSprite().getAncho() > 0 && avion.getX() - avion.getRadioSprite().getAncho() < Mapa.getAncho() ) ||
                    !(avion.getY() + avion.getRadioSprite().getAlto() > 0 && avion.getY() - avion.getRadioSprite().getAlto() < Mapa.getAlto()))
            {
                //suelto al avion
                avion.soltar();

                //Limpio el avion de todas las colecciones donde esté, asi no quedan referencias nulas
                gameLoop.remover(avionView);
                gameLoop.remover(avion);
                mapa.remover(avion);
                avionesVisibles.remove(avionView);
                //Libero memoria seteando las referencias al modelo y a la vista de avion a null

                avionView = null;
                avion = null;
            }

        }
    }
}
